Skip to content

Conversation

@learntosurf
Copy link
Collaborator

@learntosurf learntosurf commented Apr 8, 2025

๐ŸŒฑWIL

  • ์œ ํ˜•๋ณ„๋กœ ํ’€์ด๋ฒ•์„ ์ •๋ฆฌํ•˜๊ณ  ๋ณต์Šตํ•˜๋Š”๊ฒŒ ์ค‘์š”ํ•œ ๊ฒƒ ๊ฐ™๋‹ค. ์Šคํ„ฐ๋”” ๊ณผ์ œ PR ์˜ฌ๋ฆฌ๋Š” ๊ฑธ ๋ฏธ๋ฃจ๋‹ค๊ฐ€ ๊นœ๋นกํ•˜๊ฒŒ ๋˜๋Š”๋ฐ ๋นผ๋จน์ง€ ๋ง๊ณ  ์˜ฌ๋ฆฌ๊ธฐ!

๐Ÿš€์ฃผ๊ฐ„ ๋ชฉํ‘œ ๋ฌธ์ œ ์ˆ˜: 5๊ฐœ

ํ‘ผ ๋ฌธ์ œ


๋ฐฑ์ค€ #10026. ์ ๋ก์ƒ‰์•ฝ: DFS/BFS / ๊ณจ๋“œ5

์ •๋ฆฌํ•œ ๋งํฌ: ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐Ÿšฉํ”Œ๋กœ์šฐ (์„ ํƒ)

  1. $N$์„ ์ž…๋ ฅ๋ฐ›๊ณ  $N$ x $N$ ํฌ๊ธฐ์˜ ๊ทธ๋ฆฌ๋“œ๋ฅผ ์ €์žฅํ•œ๋‹ค.
  2. BFS/DFS๋ฅผ ์ด์šฉํ•˜์—ฌ ๊ฐ™์€ ์ƒ‰์˜ ์˜์—ญ์„ ์ฐพ๋Š”๋‹ค.
    • ์ ๋ก์ƒ‰์•ฝ์ด ์•„๋‹Œ ๊ฒฝ์šฐ์™€ ์ ๋ก์ƒ‰์•ฝ์ธ ๊ฒฝ์šฐ๋ฅผ ๊ฐ๊ฐ ๊ณ„์‚ฐํ•ด์•ผ ํ•œ๋‹ค.
    • ๋ชจ๋“  ์นธ์„ ํ›‘์–ด๋ณด๋ฉด์„œ ์•„์ง ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ์ƒ‰์ด ์žˆ๋‹ค๋ฉด, ๊ทธ ์นธ์„ ์‹œ์ž‘์ ์œผ๋กœ ํƒ์ƒ‰์„ ์‹œ์ž‘ํ•œ๋‹ค.
    • ํƒ์ƒ‰ํ•˜๋ฉด์„œ ์ƒํ•˜์ขŒ์šฐ๋กœ ๊ฐ™์€ ์ƒ‰์ธ ๊ณณ์„ ์ฐพ์•„๊ฐ€๊ณ , ๋ฐฉ๋ฌธ ํ‘œ์‹œ๋ฅผ ๋‚จ๊ธด๋‹ค. ์ด๊ฒŒ ํ•˜๋‚˜์˜ ๊ตฌ์—ญ์ด ๋œ๋‹ค.
  3. ์ ๋ก์ƒ‰์•ฝ์ด ์•„๋‹Œ ์‚ฌ๋žŒ ๊ธฐ์ค€์œผ๋กœ ๊ตฌ์—ญ ํƒ์ƒ‰์„ ์ง„ํ–‰ํ•œ๋‹ค.
  4. ์ ๋ก์ƒ‰์•ฝ ํƒ์ƒ‰์„ ์œ„ํ•ด ๊ทธ๋ฆฌ๋“œ๋ฅผ ๋ณ€๊ฒฝํ•œ๋‹ค.
  5. ์ ๋ก์ƒ‰์•ฝ ๊ธฐ์ค€์œผ๋กœ ๊ตฌ์—ญ ํƒ์ƒ‰์„ ์ง„ํ–‰ํ•œ๋‹ค.

๐Ÿšฉ์ œ์ถœํ•œ ์ฝ”๋“œ

import sys
input = sys.stdin.readline
from collections import deque

N = int(input().strip())
grid = [list(input().strip()) for _ in range(N)]

# ๋ฐฉํ–ฅ ๋ฒกํ„ฐ 
dx = [-1, 1, 0, 0]
dy = [0, 0, -1, 1]

def bfs(x, y, color, visited, grid):
    queue = deque([(x, y)]) # ํ ์ดˆ๊ธฐํ™” ๋ฐ ์‹œ์ž‘์  ์ถ”๊ฐ€ 
    visited[x][y] = True # ๋ฐฉ๋ฌธ ์ฒ˜๋ฆฌ 
    
    while queue:
        x, y = queue.popleft() # ํ์—์„œ ํ•˜๋‚˜๋ฅผ ๊บผ๋ƒ„
        for i in range(4): # ์ƒํ•˜์ขŒ์šฐ ํƒ์ƒ‰
            nx, ny = x + dx[i], y + dy[i]
            # ์ƒˆ๋กœ์šด ์œ„์น˜๊ฐ€ ๋ฒ”์œ„ ๋‚ด์— ์žˆ๊ณ , ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์•˜์œผ๋ฉฐ, ๊ฐ™์€ ์ƒ‰์ด๋ฉด ํƒ์ƒ‰ ์ง„ํ–‰ 
            if 0 <= nx < N and 0 <= ny < N and not visited[nx][ny]:
                if grid[nx][ny] == color:
                    visited  [nx][ny] = True # ๋ฐฉ๋ฌธ ์ฒ˜๋ฆฌ
                    queue.append((nx, ny)) # ํ์— ์ถ”๊ฐ€ 

def count_regions(grid, is_color_blind):
    visited = [[False] * N for _ in range(N)]
    count = 0

    for i in range(N):
        for j in range(N):
            if not visited[i][j]:  # ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ BFS ํƒ์ƒ‰ ์‹œ์ž‘
                count += 1
                color = grid[i][j]

                # ์ ๋ก์ƒ‰์•ฝ ๋ชจ๋“œ๋ผ๋ฉด R๊ณผ G๋ฅผ ๋™์ผํ•˜๊ฒŒ ์ฒ˜๋ฆฌ
                if is_color_blind and color in "RG":
                    bfs(i, j, "R", visited, grid)
                else:
                    bfs(i, j, color, visited, grid)
    
    return count

# ์ ๋ก์ƒ‰์•ฝ์ด ์•„๋‹Œ ๊ฒฝ์šฐ 
normal_count = count_regions(grid, is_color_blind=False)

# ์ ๋ก์ƒ‰์•ฝ์ธ ๊ฒฝ์šฐ (R๊ณผ G๋ฅผ ๋™์ผํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•œ grid ์ƒ์„ฑ)
 for i in range(N):
   for j in range(N):
        if grid[i][j] == 'G':
            grid[i][j] = 'R'
                   
color_blind_count = count_regions(grid, is_color_blind=True)
print(normal_count, color_blind_count)

๐Ÿ’กTIL

  • 2์ฐจ์› ๋ฐฐ์—ด์˜ ์ƒํ•˜์ขŒ์šฐ ์ธ์ ‘ ํƒ์ƒ‰์€ ๋Œ€ํ‘œ์ ์œผ๋กœ BFS/DFS๋ฅผ ํ™œ์šฉํ•ด์„œ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.
  • BFS/DFS์—์„œ ํ•ญ์ƒ ๋‘ ์กฐ๊ฑด์„ ํ™•์ธํ•œ๋‹ค.
    • (1) ์ฃผ์–ด์ง„ ๋ฐฐ์—ด ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚˜์ง€๋Š” ์•Š์•˜๋Š”๊ฐ€?
    • (2) ์ด๋ฏธ ๋ฐฉ๋ฌธ๋œ ๊ณณ์€ ์•„๋‹Œ๊ฐ€? ํ˜„์žฌ ํƒ์ƒ‰์ค‘์ธ ๊ตฌ์—ญ๊ณผ ๊ฐ™์€ ์ƒ‰์ธ๊ฐ€?

๋ฐฑ์ค€ #4963. ์„ฌ์˜ ๊ฐœ์ˆ˜: DFS/BFS / ์‹ค๋ฒ„2

์ •๋ฆฌํ•œ ๋งํฌ: ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐Ÿšฉํ”Œ๋กœ์šฐ (์„ ํƒ)

  1. ์ž…๋ ฅ์„ ๋ฐ›์•„์„œ 2์ฐจ์› ๋ฆฌ์ŠคํŠธ(์ง€๋„)๋กœ ์ €์žฅํ•œ๋‹ค.
  2. ๋ชจ๋“  ์นธ์„ ํƒ์ƒ‰ํ•˜๋ฉฐ 1(๋•…)์„ ์ฐพ์œผ๋ฉด, DFS ๋˜๋Š” BFS๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์—ฐ๊ฒฐ๋œ ๋ชจ๋“  ๋•…์„ ๋ฐฉ๋ฌธ ์ฒ˜๋ฆฌํ•œ๋‹ค.
    • DFS(์žฌ๊ท€)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์—ฐ๊ฒฐ๋œ ๋•…์„ ๋ชจ๋‘ ํƒ์ƒ‰ํ•œ๋‹ค.
      • ์ธ์ ‘ํ•œ ๋…ธ๋“œ๋ฅผ ํ์— ๋„ฃ๊ธฐ ์ „์— (1)์ง€๋„ ๋ฐ–์œผ๋กœ ๋ฒ—์–ด๋‚˜์ง€๋Š” ์•Š์•˜๋Š”์ง€, (2)๋ฐ”๋‹ค์ด๊ฑฐ๋‚˜ ์ด๋ฏธ ๋ฐฉ๋ฌธ๋œ ๊ณณ์€ ์•„๋‹Œ์ง€ ์กฐ๊ฑด์„ ํ™•์ธํ•ด์•ผ ํ•œ๋‹ค.
      • visited ๋ฐฐ์—ด ์—†์ด 1โ†’0์œผ๋กœ ๋ฐ”๊พธ์–ด ํƒ์ƒ‰์„ ์ฒ˜๋ฆฌ ํ•  ์ˆ˜ ์žˆ๋‹ค
    • ๋˜๋Š” BFS(ํ)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์—ฐ๊ฒฐ๋œ ๋•…์„ ํ์— ๋„ฃ๊ณ  ํƒ์ƒ‰ํ•œ๋‹ค.
  3. ์ƒˆ๋กœ์šด ์„ฌ์„ ์ฐพ์„ ๋•Œ๋งˆ๋‹ค ์นด์šดํŠธ๋ฅผ ์ฆ๊ฐ€์‹œํ‚จ๋‹ค.
  4. ์—ฌ๋Ÿฌ๊ฐœ์˜ ์ผ€์ด์Šค๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ณ , (0, 0) ์ž…๋ ฅ์ด ๋“ค์–ด์˜ค๋ฉด ์ข…๋ฃŒํ•œ๋‹ค.

๐Ÿšฉ์ œ์ถœํ•œ ์ฝ”๋“œ

import sys
input = sys.stdin.readline
from collections import deque

# 8๋ฐฉํ–ฅ (์ƒ, ํ•˜, ์ขŒ, ์šฐ, ๋Œ€๊ฐ์„  4๊ฐœ)
dx = [-1, 1, 0, 0, -1, -1, 1, 1]
dy = [0, 0, -1, 1, -1, 1, -1, 1]

def bfs(x, y, graph, w, h):
    queue = deque([(x, y)])
    graph[y][x] = 0  # ๋ฐฉ๋ฌธ ์ฒ˜๋ฆฌ (1 โ†’ 0 ๋ณ€๊ฒฝ)

    while queue: # ํ๊ฐ€ ๋นŒ ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณต
        cx, cy = queue.popleft() # ํ˜„์žฌ ์ขŒํ‘œ ๊บผ๋‚ด๊ธฐ 
        for i in range(8):  # 8๋ฐฉํ–ฅ ํƒ์ƒ‰
            nx, ny = cx + dx[i], cy + dy[i] # ์ƒˆ๋กœ์šด ์ขŒํ‘œ ๊ณ„์‚ฐ
            if 0 <= nx < w and 0 <= ny < h and graph[ny][nx] == 1:
                graph[ny][nx] = 0  # ๋ฐฉ๋ฌธ ์ฒ˜๋ฆฌ
                queue.append((nx, ny)) # ํ์— ์ถ”๊ฐ€ (๋‹ค์Œ์— ํƒ์ƒ‰ํ•  ๊ณณ)
 
while True:
    w, h = map(int, input().split())
    if w == 0 and h == 0:
        break  # ์ข…๋ฃŒ ์กฐ๊ฑด
    island = [list(map(int, input().split())) for _ in range(h)]

    count = 0 # ์„ฌ์˜ ๊ฐœ์ˆ˜ 
    for y in range(h):
        for x in range(w):
            if island[y][x] == 1:  # ์ƒˆ๋กœ์šด ์„ฌ ๋ฐœ๊ฒฌ
                count += 1
                bfs(x, y, island, w, h) # BFS ์‹คํ–‰
    
    print(count)

๐Ÿ’กTIL

  • 8๋ฐฉํ–ฅ ํƒ์ƒ‰
    • ๋ฐฉํ–ฅ๋ฒกํ„ฐ (ํ–‰๊ณผ ์—ด ๊ด€์ ์—์„œ ์ขŒํ‘œ๋ฅผ ์ด๋™ํ•˜๋Š” ๋ฐฉ์‹)

      dx = [-1, 1, 0, 0, -1, -1, 1, 1]  # X(๊ฐ€๋กœ) ๋ฐฉํ–ฅ ์ด๋™
      dy = [0, 0, -1, 1, -1, 1, -1, 1]  # Y(์„ธ๋กœ) ๋ฐฉํ–ฅ ์ด๋™
      
      ๋ฐฉํ–ฅ dx (์—ด ์ด๋™) dy (ํ–‰ ์ด๋™)
      ์ƒ(์œ„) -1 0
      ํ•˜(์•„๋ž˜) 1 0
      ์ขŒ(์™ผ์ชฝ) 0 -1
      ์šฐ(์˜ค๋ฅธ์ชฝ) 0 1
      ์ขŒ์ƒ(์™ผ์ชฝ ์œ„) -1 -1
      ์šฐ์ƒ(์˜ค๋ฅธ์ชฝ ์œ„) -1 1
      ์ขŒํ•˜(์™ผ์ชฝ ์•„๋ž˜) 1 -1
      ์šฐํ•˜(์˜ค๋ฅธ์ชฝ ์•„๋ž˜) 1 1
      • y(ํ–‰, ์„ธ๋กœ ๋ฐฉํ–ฅ): ์•„๋ž˜๋กœ ๊ฐˆ์ˆ˜๋ก +1, ์œ„๋กœ ๊ฐˆ์ˆ˜๋ก -1
      • x(์—ด, ๊ฐ€๋กœ ๋ฐฉํ–ฅ): ์˜ค๋ฅธ์ชฝ์œผ๋กœ ๊ฐˆ์ˆ˜๋ก +1, ์™ผ์ชฝ์œผ๋กœ ๊ฐˆ์ˆ˜๋ก -1
    • dx[i], dy[i]๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ˜๋ณต๋ฌธ์œผ๋กœ ํƒ์ƒ‰ํ•˜๋ฉด ์ฝ”๋“œ๋ฅผ ๋‹จ์ˆœํ•˜๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.

  • queue = deque([(x, y)]), queue.append((nx, ny)): ๋ฆฌ์ŠคํŠธ ์•ˆ์— ํŠœํ”Œ ์ฒ˜๋ฆฌํ•ด์„œ ์ถ”๊ฐ€ํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค.

๋ฐฑ์ค€ #14430. ์ž์› ์บ๊ธฐ: DP / ์‹ค๋ฒ„2

์ •๋ฆฌํ•œ ๋งํฌ: ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐Ÿšฉํ”Œ๋กœ์šฐ (์„ ํƒ)

  1. DP ํ…Œ์ด๋ธ”์„ ์ •์˜ํ•œ๋‹ค.
    • dp[i][j]: (i, j)๊นŒ์ง€ ๋„๋‹ฌํ–ˆ์„ ๋•Œ ์ตœ๋Œ€ ์ž์› ๊ฐœ์ˆ˜
  2. ์ ํ™”์‹์„ ์œ ๋„ํ•œ๋‹ค.
    • (i, j)์— ๋„์ฐฉํ–ˆ์„ ๋•Œ ๊ฐ€๋Šฅํ•œ ๋‘ ๊ฐ€์ง€ ๊ฒฝ๋กœ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.
      • (i-1, j)์—์„œ ์•„๋ž˜๋กœ ๋‚ด๋ ค์˜จ ๊ฒฝ์šฐ
      • (i, j-1)์—์„œ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ์ด๋™ํ•œ ๊ฒฝ์šฐ
    • ๋”ฐ๋ผ์„œ, DP ์ ํ™”์‹์€ dp[i][j] = max(dp[i-1][j], dp[i][j-1]) + grid([i][j])์ด๋‹ค.
    • ๋‹จ, dp[0][j]์™€ dp[i][0]์€ ๊ฐ๊ฐ ์ฒซ ํ–‰๊ณผ ์ฒซ ์—ด์ด๋ฏ€๋กœ ์ดˆ๊ธฐํ™”๊ฐ€ ํ•„์š”ํ•˜๋‹ค.
  3. ์ดˆ๊ธฐ ์กฐ๊ฑด์„ ์„ค์ •ํ•œ๋‹ค.
    • dp[0][0] = grid[0][0]
    • ์ฒซ ๋ฒˆ์งธ ํ–‰: dp[0][j] = dp[0][j-1] + grid[0][j]
    • ์ฒซ ๋ฒˆ์งธ ์—ด: dp[i][0] = dp[i-1][0] + grid[i][0]

๐Ÿšฉ์ œ์ถœํ•œ ์ฝ”๋“œ

import sys 
input = sys.stdin.readline

N, M = map(int, input().split())
grid = [list(map(int, input().split())) for _ in range(N)]

dp = [[0] * M for _ in range(N)]
dp[0][0] = grid[0][0]

def max_resources(N, M, grid):
    # ์ฒซ ๋ฒˆ์งธ ํ–‰ ์ฑ„์šฐ๊ธฐ
    for j in range(1, M):
        dp[0][j] = dp[0][j-1] + grid[0][j]

    # ์ฒซ ๋ฒˆ์งธ ์—ด ์ฑ„์šฐ๊ธฐ
    for i in range(1, N):
        dp[i][0] = dp[i-1][0] + grid[i][0]

    # DP ํ…Œ์ด๋ธ” ์ฑ„์šฐ๊ธฐ
    for i in range(1, N):
        for j in range(1, M):
            dp[i][j] = max(dp[i-1][j], dp[i][j-1]) + grid[i][j]

    return dp[N-1][M-1]

print(max_resources(N, M, grid))

๐Ÿ’กTIL

  • DP๋ฅผ ์ด์šฉํ•˜๋ฉด ๋น ๋ฅด๊ฒŒ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๊ทธ๋ฆฌ๋””๋‚˜ BFS/DFS๋กœ๋Š” ์ ‘๊ทผํ•˜๊ธฐ ์–ด๋ ต๋‹ค. ์ตœ์ ํ•ด๋ฅผ ๊ตฌํ•˜๊ธฐ ์œ„ํ•œ ๋ˆ„์  ํ•ฉ์„ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ์‹์ด ์ ์ ˆํ•˜๋‹ค.

๋ฐฑ์ค€ #2503. ์ˆซ์ž ์•ผ๊ตฌ: ๊ตฌํ˜„ / ์‹ค๋ฒ„3

์ •๋ฆฌํ•œ ๋งํฌ: ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐Ÿšฉํ”Œ๋กœ์šฐ (์„ ํƒ)

  1. 1~9์ค‘ ์„œ๋กœ ๋‹ค๋ฅธ 3๊ฐœ์˜ ์ˆซ์ž๋กœ ์ด๋ฃจ์–ด์ง„ ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.
  2. ๊ฐ ์ˆซ์ž์— ๋Œ€ํ•ด ์งˆ๋ฌธ์„ ๊ฒ€์ฆํ•œ๋‹ค.
    • ๊ฐ ํ›„๋ณด ์ˆซ์ž๊ฐ€ ๋ชจ๋“  ์งˆ๋ฌธ์˜ ์ŠคํŠธ๋ผ์ดํฌ์™€ ๋ณผ ๊ฐœ์ˆ˜ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.
  3. ๋ชจ๋“  ์งˆ๋ฌธ์„ ๋งŒ์กฑํ•˜๋Š” ๊ฒฝ์šฐ๋งŒ ์„ธ์–ด ๊ฒฝ์šฐ์˜ ๊ฐœ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

๐Ÿšฉ์ œ์ถœํ•œ ์ฝ”๋“œ

import sys 
input = sys.stdin.readline
from itertools import permutations

N = int(input().strip()) # ์งˆ๋ฌธ ํšŸ์ˆ˜ 
questions = [list(map(int, input().split())) for _ in range(N)] # ์งˆ๋ฌธ ๋ฆฌ์ŠคํŠธ

# 1๋ถ€ํ„ฐ 9๊นŒ์ง€์˜ ์ˆซ์ž ์ค‘ 3๊ฐœ๋ฅผ ๋ฝ‘๋Š” ์ˆœ์—ด
nums = list(permutations(range(1,10), 3)) 
cnt = 0 # ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ์˜ ์ˆ˜

# ๋‘ ์ˆ˜๋ฅผ ๋น„๊ตํ•˜์—ฌ ์ŠคํŠธ๋ผ์ดํฌ์™€ ๋ณผ์„ ๋ฐ˜ํ™˜
def strike_and_ball(num1, num2):
    strike = sum(a == b for a, b in zip(num1, num2))
    ball = sum(a in num2 for a in num1) - strike
    return strike, ball 
    
for num in nums:
    num_str = ''.join(map(str, num)) # ์ˆœ์—ด์„ ๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜
    valid = True # ๊ฐ€๋Šฅํ•œ ์ˆซ์ž์ธ์ง€ ํŒ๋ณ„
    
    for q_num, q_strike, q_ball in questions:
        q_str = str(q_num) # ์ž…๋ ฅ๋œ ์ˆซ์ž๋„ ๋ฌธ์ž์—ด ๋ณ€ํ™˜ 
        strike, ball = strike_and_ball(num_str, q_str)
        if strike != q_strike or ball != q_ball:
            valid = False
            break  # ํ•˜๋‚˜๋ผ๋„ ๋ถˆ๊ฐ€๋Šฅํ•˜๋ฉด ๋” ๋ณผ ํ•„์š” ์—†์Œ
    
    if valid:
        cnt += 1

print(cnt)

๐Ÿ’กTIL

  • permutations(range(1,10), 3): 1~9๊นŒ์ง€ ์„œ๋กœ ๋‹ค๋ฅธ ์ˆซ์ž 3๊ฐœ๋ฅผ ๋ฝ‘๋Š” ์ˆœ์—ด(Permutation)

    (1, 2, 3), (1, 2, 4), ..., (9, 8, 7)
  • ์ŠคํŠธ๋ผ์ดํฌ์™€ ๋ณผ์„ ๊ณ„์‚ฐํ•˜๋Š” ํ•จ์ˆ˜

    def strike_and_ball(num1, num2):
        strike = sum(a == b for a, b in zip(num1, num2))
        ball = sum(a in num2 for a in num1) - strike
        return strike, ball 
    • ์ŠคํŠธ๋ผ์ดํฌ ๊ณ„์‚ฐ: sum(a == b for a, b in zip(num1, num2))

      • zip(num1, num2): ๋‘ ์ˆซ์ž๋ฅผ ์ž๋ฆฌ๋ณ„๋กœ ๋ฌถ์–ด์„œ ๋น„๊ตํ•œ๋‹ค.
      • ๊ฐ™์€ ์ž๋ฆฌ(index)์—์„œ ์ˆซ์ž๊ฐ€ ๊ฐ™์€ ๊ฒฝ์šฐ๋งŒ True์ด๋‹ค. โ†’ 1๋กœ ๊ณ„์‚ฐํ•œ๋‹ค.
      • sum()์„ ์‚ฌ์šฉํ•˜์—ฌ True ๊ฐœ์ˆ˜๋ฅผ ๊ตฌํ•œ๋‹ค.
      num1 = (3, 2, 4)  # ํ›„๋ณด ์ˆซ์ž
      num2 = (4, 2, 9)  # ์งˆ๋ฌธ ์ˆซ์ž
      
      zip(num1, num2)  # [(3,4), (2,2), (4,9)]
      strike = sum(a == b for a, b in zip(num1, num2))  
      # โ†’ False(0), True(1), False(0)  -> sum(0, 1, 0) = 1
      
      print(strike)  # ์ถœ๋ ฅ: 1
    • ๋ณผ ๊ณ„์‚ฐ: sum(a in num2 for a in num1) - strike

      • num1์˜ ๊ฐ ์ˆซ์ž๊ฐ€ num2์— ํฌํ•จ๋˜์–ด ์žˆ๋Š”์ง€๋ฅผ ์ฒดํฌํ•œ๋‹ค. (์ˆœ์„œ๋Š” ๋ฌด๊ด€ํ•˜๋‹ค.)
      • ํฌํ•จ๋˜์–ด ์žˆ๋‹ค๋ฉด True๋กœ 1๋กœ ๊ณ„์‚ฐํ•œ๋‹ค. ๋‹จ, ์ŠคํŠธ๋ผ์ดํฌ์˜ ๊ฐœ์ˆ˜๋Š” ๋นผ์ฃผ์–ด์•ผ ํ•œ๋‹ค.
      num1 = (3, 2, 4)  # ํ›„๋ณด ์ˆซ์ž
      num2 = (4, 2, 9)  # ์งˆ๋ฌธ ์ˆซ์ž
      
      # 1. `sum(a in num2 for a in num1)`
      #    - 3์€ num2(4,2,9)์— ์—†์Œ โ†’ False(0)
      #    - 2๋Š” num2(4,2,9)์— ์žˆ์Œ โ†’ True(1)
      #    - 4๋Š” num2(4,2,9)์— ์žˆ์Œ โ†’ True(1)
      #    โ†’ ์ดํ•ฉ: 0 + 1 + 1 = 2 (strike ํฌํ•จ)
      
      # 2. `strike` ๊ฐ’ ๋นผ๊ธฐ
      strike = 1  # ์œ„์—์„œ ๊ตฌํ•œ ๊ฐ’
      ball = 2 - 1  # ์ด 2๊ฐœ ์ค‘ 1๊ฐœ๋Š” strike์˜€์œผ๋ฏ€๋กœ ์ œ์™ธ
      print(ball)  # ์ถœ๋ ฅ: 1
  • ๊ฒฐ๊ณผ(strike, ball)๊ฐ€ ์งˆ๋ฌธ์˜ q_strike, q_ball๊ณผ ๋‹ค๋ฅด๋ฉด ๋ถˆ๊ฐ€๋Šฅํ•œ ์ˆซ์ž์ด๋ฏ€๋กœ valid=False๋กœ ์„ค์ •ํ•˜๊ณ  breakํ•œ๋‹ค.

๋ฐฑ์ค€ #2342. Dance Dance Revolution: DP / ๊ณจ๋“œ3

์ •๋ฆฌํ•œ ๋งํฌ: (๋ฐ”๋กœ๊ฐ€๊ธฐ)

๐Ÿšฉ์ œ์ถœํ•œ ์ฝ”๋“œ

import sys 
input = sys.stdin.readline

steps = list(map(int, input().split()))
if steps: 
    steps.pop()  # ๋งˆ์ง€๋ง‰ 0 ์ œ๊ฑฐ

# dp ํ…Œ์ด๋ธ”
INF = float('inf') # ๋ฌดํ•œ๋Œ€ ๊ฐ’ 
dp = [[INF]*5 for _ in range(5)]
dp[0][0] = 0

def move_power(start, end):
    if start == 0: # ์ค‘์•™์—์„œ ๋‹ค๋ฅธ ๊ณณ์œผ๋กœ ์ด๋™ํ•˜๋Š” ๊ฒฝ์šฐ 
        return 2
    if start == end: # ๊ฐ™์€ ์ง€์ ์„ ์—ฐ์†ํ•ด์„œ ๋ฐŸ๋Š” ๊ฒฝ์šฐ 
        return 1 
    if abs(start - end) == 2: # ๋ฐ˜๋Œ€ํŽธ์œผ๋กœ ์ด๋™ํ•˜๋Š” ๊ฒฝ์šฐ
        return 4 
    return 3 # ์ธ์ ‘ํ•œ ์ง€์ ์œผ๋กœ ์ด๋™ํ•˜๋Š” ๊ฒฝ์šฐ

for step in steps:
    new_dp = [[INF]*5 for _ in range(5)] # ์ƒˆ๋กœ์šด dp ํ…Œ์ด๋ธ”
    
    for left in range(5):
        for right in range(5):
            if dp[left][right] == INF:
                continue 
            
            current_power = dp[left][right] # ํ˜„์žฌ ์œ„์น˜์˜ ํž˜์˜ ์†Œ๋ชจ๋Ÿ‰
            
            # ์™ผ๋ฐœ์„ ์›€์ง์ด๋Š” ๊ฒฝ์šฐ (์˜ค๋ฅธ๋ฐœ์ด step์— ์žˆ์œผ๋ฉด ์•ˆ ๋จ)
            if step != right:
                new_dp[step][right] = min(new_dp[step][right], current_power + move_power(left, step))

            # ์˜ค๋ฅธ๋ฐœ์„ ์›€์ง์ด๋Š” ๊ฒฝ์šฐ (์™ผ๋ฐœ์ด step์— ์žˆ์œผ๋ฉด ์•ˆ ๋จ)
            if step != left:
                new_dp[left][step] = min(new_dp[left][step], current_power + move_power(right, step))
    
    dp = new_dp # dp ํ…Œ์ด๋ธ” ์—…๋ฐ์ดํŠธ

print(min(min(row) for row in dp)) 

๋ฐฑ์ค€ #2293. ๋™์ „1: DP / ๊ณจ๋“œ4

๐Ÿšฉ์ œ์ถœํ•œ ์ฝ”๋“œ

import sys 
input = sys.stdin.readline

n, k = map(int, input().split())
coins = [int(input()) for _ in range(n)]

dp = [0] * (k + 1)
dp[0] = 1 # 0์›์„ ๋งŒ๋“œ๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜๋Š” 1 (์•„๋ฌด ๋™์ „๋„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ)

for coin in coins: 
    for j in range(coin, k+1):
        dp[j] += dp[j - coin] # ์ ํ™”์‹

print(dp[k])

@github-actions
Copy link

github-actions bot commented Apr 8, 2025

2025-04 ์ฑŒ๋ฆฐ์ง€ ์ง„ํ–‰ ์ƒํ™ฉ

์‚ฌ์šฉ์ž ์ฑŒ๋ฆฐ์ง€ ์œ ํ˜• ๋ฌธ์ œ ์ˆ˜ ๋‹ฌ์„ฑ ์—ฌ๋ถ€
Mingguriguri ๊ทธ๋ž˜ํ”„ 0 โŒ
Mingguriguri DP 5 โœ…
zaqquum ๊ทธ๋ž˜ํ”„ 0 โŒ
zaqquum DP 2 โŒ
learntosurf ๊ทธ๋ž˜ํ”„ 0 โŒ
learntosurf DP 3 โŒ

@github-actions
Copy link

github-actions bot commented Apr 8, 2025

2025-04 ์ฑŒ๋ฆฐ์ง€ ์ง„ํ–‰ ์ƒํ™ฉ

์‚ฌ์šฉ์ž ์ฑŒ๋ฆฐ์ง€ ์œ ํ˜• ๋ฌธ์ œ ์ˆ˜ ๋‹ฌ์„ฑ ์—ฌ๋ถ€
Mingguriguri ๊ทธ๋ž˜ํ”„ 0 โŒ
Mingguriguri DP 5 โœ…
zaqquum ๊ทธ๋ž˜ํ”„ 0 โŒ
zaqquum DP 2 โŒ
learntosurf ๊ทธ๋ž˜ํ”„ 2 โŒ
learntosurf DP 3 โŒ

@Mingguriguri Mingguriguri reopened this Apr 8, 2025
@Mingguriguri Mingguriguri reopened this Apr 8, 2025
@Mingguriguri Mingguriguri merged commit dd0e3b5 into main Apr 8, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants